/*
 * genpltfiles.c
 *
 *  Created on: 18 mai 2012
 *      Author: Administrateur
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "prevision.h"

const char chTopMsg[][90]= {
		"reset\n",
		"clear\n",
		"set datafile separator \";\"\n",
		"set terminal push\n",
		"set terminal png size %d,%d\n",
		"set output '%s%s_p-%02d.png'\n",
		"set multiplot layout %d,%d title \"%s\"\n",
		{"set lmargin  7\n"},
		{"set bmargin  2\n"},
		{"set rmargin  1\n"},
		{"set tmargin  1\n"},
		{"set boxwidth 0.5 absolute\n"},
		{"set style fill   solid 1.00 border\n"},
		{"set key off\n"},
		{"unset ytics\n"},
		{"set xrange [0:%d]\n"}, //15
		{"set yrange [0:]\n"},
		{"set ylabel \"Sorties\" offset character 1,0 textcolor rgb \"red\" font \",8\"\n"},
		{"set style data boxes\n"},
		{"unset xtics\n"},
		{"set xtics border out rotate by -270  offset character 0, 0.5, 0 autojustify\n"},
		{"set mxtics\n"},
		{"set xtics  norangelimit font \",8\"\n"},
		{"set offsets 0,0,20,0\n"},
		{"set title \"%s\" font \",8\" offset character 0,-2.5\n"}, //24
		{"plot '%s' using 1:2, '' using 1:2:2 with labels center offset 0,0.5\n"},
		{"replot\n"},
		{"unset multiplot\n"},
		{"set output\n"},
		{"set terminal pop\n"},
		"exit",//30
		"set format y \"\"\n", //"unset ytics\n",
		"set border 3\n",//set ytics 1,1 font \",8\"\n",
		"set ytics scale 0,0\n"//set mytics\n"
};
const char cMsg[][200]= {
		"#Page : %02d, Resolution %d x %d, image %02d, couverture : %d\n",
		"#Periode du %s %02d/%02d/%04d au %s %02d/%02d/%04d\n",
		"# Fin image %02d\n\n",
		"Img:%02d, Couv:%d du %s %02d/%02d/%04d au %s %02d/%02d/%04d",
		"Img:%02d, Couv partielle du %s %02d/%02d/%04d au %s %02d/%02d/%04d",
		"d%02d",
		"Img:%02d, Meilleurs voisin de:%02d",
		"RMAX=%d\n",//7
		"plot '%s' \\\n",
		"set ylabel \"%s\"   offset 2,0 textcolor rgb \"red\"\n",
		"set rrange[0:%d]\n",
		"f(b)= (b == -2)?0:RMAX-b +1\n", //11
		"using (($1*355)/%d):(f($2)), \\\n",
		"'' using (($1*355)/%d):(f($2)):1 with labels center offset -0.85,-0.25, \\\n",
		"'' using (($1*355)/%d):(f($2)):3 with labels right offset 0.75,-0.5 textcolor rgb \"blue\", \\\n",
		"'' using (($1*355)/%d):(f($2)):4 with labels right offset 1.50,-0.5 textcolor rgb \"black\", \\\n",
		"'' using (($1*355)/%d):(f($2)):5 with labels right offset 2.25,-0.5 textcolor rgb \"red\"\n"
};

etStatus CreeFichFreqSortie (const char *cCheminVersFichier,
		stTabOccurence **ptrResutAnalyse, const char *mode)
{
	etStatus status = eNotSet;
	char sBuffer[128]={0};
	char sSuffix[5]={0};
	int i;

	int iNbLigne = 0;
	int iLgnCmdPlt = 0;
	int iCouverture = 0;
	int iDerniereBoule = 0;
	int iLenFileName = 0;

	int iPageDessin = 0;
	int iResolution = 0;
	int iValue = 0;
	int iLigne = 0;
	int iPassage = 0;
	int iPartiel =0;
	int iNbImage = 0;

	int iBPeriodeDeb = 0;
	int iBPeriodeFin = 0;
	stTirage *pTirDeb = NULL;
	stTirage *pTirFin = NULL;

	int iJour[2]={0};
	int iMois[2]={0};
	int iAnne [2]={0};
	etJour eDay[2]={eNoDaySet};

	FILE * f1 = NULL;
	FILE * fPltData = NULL;
	FILE * fPltDtmp = NULL;

	char *cmd_gplt = NULL;
	char *sPltData = NULL;
	char *sPltDtmp = NULL;
	char *pLastTir = NULL;
	char *sFilePfix= NULL;
	char sType[]="_F";

	iNbLigne = (**ptrResutAnalyse).iNbElm;
	if((**ptrResutAnalyse).pCnf->pTabTirage != NULL){
		iDerniereBoule = (**ptrResutAnalyse).pCnf->nbm[0];
	}

	iLenFileName = strlen(cCheminVersFichier);
	sFilePfix = calloc(iLenFileName-3,sizeof(char));
	strncpy(sFilePfix,cCheminVersFichier,iLenFileName-4);
	iLenFileName= iLenFileName +strlen(sType)+1;

	// preparation du fichier de commande gnuplot
	cmd_gplt = calloc(iLenFileName, sizeof(char));
	strcpy(cmd_gplt,sFilePfix);
	strcat(cmd_gplt,sType);
	strcat(cmd_gplt,".plt");

	f1 = fopen(cmd_gplt,"w");

	if (f1 == NULL)
		return (eErreur);
	// ----------------------------------
	iLgnCmdPlt=0;
	while(iLgnCmdPlt<4){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}
	// ----------------------------------

	// preparation du fichier resume des donnees
	sPltDtmp = calloc(iLenFileName, sizeof(char));
	strcpy(sPltDtmp,sFilePfix);
	strcat(sPltDtmp,sType);
	strcat(sPltDtmp,".xxx");

	// preparation du fichier resume des donnees
	sPltData = calloc(iLenFileName, sizeof(char));
	strcpy(sPltData,sFilePfix);
	strcat(sPltData,sType);
	strcat(sPltData,".dat");
	fPltData = fopen(sPltData,"w");

	if (fPltData == NULL){
		fclose(f1);
		return (eErreur);
	}
	// ----------------------------------

	// On met CST_MAX_GPH images maxi par page de dessins
	iPageDessin = iNbLigne / CST_MAX_GPH;
	iValue = iNbLigne % CST_MAX_GPH;
	if( iValue!= 0){
		// Verifions que l'on a on moins une page
		if(!iPageDessin){
			iResolution = CST_PIX_GPH * iValue;
		}
		else
		{
			iResolution = CST_HT_GPH;
		}
		iPageDessin++;
	}

	fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
	iLgnCmdPlt++;

	// Recuperer les 3 derniers tirages pour en faire le titre

	pLastTir = DonneLesDerniersTirages(ptrResutAnalyse,3);
	//-------------------------

	// Analyse globale des tirages
	iValue = 1;
	iLigne = 1;
	iCouverture = (**ptrResutAnalyse).list[0][iLigne -1].iNbTirage;

	fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
	iLgnCmdPlt++;

	//fprintf(f1,chTopMsg[6],CST_MAX_GPH,1,pLastTir);
	fprintf(f1, "set multiplot layout %d,1 title \"Nb sorties des boules\\n%s\"\n",CST_MAX_GPH,pLastTir);

	iLgnCmdPlt++;

	// Debut code fixe
	iLgnCmdPlt=7;
	while(iLgnCmdPlt<14){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}
	// Ligne XRANGE
	fprintf(f1,chTopMsg[iLgnCmdPlt],iDerniereBoule+1);
	iLgnCmdPlt++;
	while(iLgnCmdPlt<24){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}

	fprintf(f1,"set offsets 0,0,40,0\n");

	fprintf(fPltData,cMsg[0],iValue
			, CST_PIX_HOR, iResolution, iLigne, iCouverture);

	// Determination  de la periode de l'ensemble d'etude
	iBPeriodeDeb = (**ptrResutAnalyse).pCnf->pTabTirage->total;
	pTirDeb = &(**ptrResutAnalyse).pCnf->pTabTirage->LesTirages[iBPeriodeDeb-1];
	iJour[0] = pTirDeb->id.jour;
	iMois [0]= pTirDeb->id.mois;
	iAnne [0]= pTirDeb->id.ans;
	eDay [0]= DonneJourDeLaSemaine(iJour[0], iMois[0], iAnne[0]);
	iBPeriodeFin = (**ptrResutAnalyse).pCnf->iTopDelta;
	pTirFin = &(**ptrResutAnalyse).pCnf->pTabTirage->LesTirages[iBPeriodeFin];
	iJour [1]= pTirFin->id.jour;
	iMois [1]= pTirFin->id.mois;
	iAnne [1]= pTirFin->id.ans;
	eDay [1]= DonneJourDeLaSemaine(iJour[1], iMois[1], iAnne[1]);
	fprintf(fPltData,cMsg[1],uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
			uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);

	// Img:%02d, Couv:%d du %s xx/xx/xxxx au %s xx/xx/xxxx
	sprintf(sBuffer,cMsg[3],iLigne, iCouverture,uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
			uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
	fprintf(f1,"set title \"%s\" font \",8\" offset character 0,-1\n",sBuffer);
	iLgnCmdPlt++;

	sprintf(sSuffix,cMsg[5],iLigne);
	strncpy(&sPltDtmp[iLenFileName-4],sSuffix,3);
	fPltDtmp = fopen(sPltDtmp,"w");
	if (fPltDtmp == NULL)
		printf("fpltEERROR\n");
	for (i=0;i<iDerniereBoule;i++){
		fprintf(fPltData,"%d;%d\n",(i+1),(**ptrResutAnalyse).list[0][iLigne-1].boule[i].total);
		fprintf(fPltDtmp,"%d;%d\n",(i+1),(**ptrResutAnalyse).list[0][iLigne-1].boule[i].total);
	}
	fprintf(fPltData,cMsg[2],iLigne);
	fprintf(f1,chTopMsg[iLgnCmdPlt],sPltDtmp);
	iLgnCmdPlt++;
	iLgnCmdPlt++;
	fclose(fPltDtmp);
	fprintf(f1,"set offsets 0,0,20,0\n");

	iLigne++;
	while(iNbLigne >= 1){

		iCouverture = (**ptrResutAnalyse).list[0][iNbLigne].iNbTirage;

		if(iCouverture == 0){
			iPartiel=0;
			// verifions que c'est bien une couverture partielle
			if((**ptrResutAnalyse).list[0][iNbLigne].ucApB != NULL){
				iPartiel=1;
				// creation fichier temporaire avec les donnees pour gnuplot
				fprintf(fPltData,"#Page : %02d, Resolution %d x %d, image %02d, couverture : partielle\n",iValue
						, 1024, iResolution, iLigne);

				iBPeriodeDeb = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[0];
				pTirDeb = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeDeb-1].LesTirages;
				iJour[0] = pTirDeb->id.jour;
				iMois [0]= pTirDeb->id.mois;
				iAnne [0]= pTirDeb->id.ans;
				eDay[0] = DonneJourDeLaSemaine(iJour[0],iMois[0],iAnne[0]);

				// recherche jour periode fin
				for(i=0;i<iDerniereBoule;i++){
					if((**ptrResutAnalyse).list[0][iNbLigne].ucApB[i]==0)
						break;
				}
				if(i != iDerniereBoule){
					i--;
					iBPeriodeFin = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[i];
					pTirFin = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeFin-1].LesTirages;
					iJour[1] = pTirFin->id.jour;
					iMois [1]= pTirFin->id.mois;
					iAnne [1]= pTirFin->id.ans;
					eDay[1] = DonneJourDeLaSemaine(iJour[1],iMois[1],iAnne[1]);
					fprintf(fPltData,cMsg[1],uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
							uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
					sprintf(sBuffer,cMsg[4],iLigne, uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
							uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
					fprintf(f1,chTopMsg[24],sBuffer);

				}
				else{
					fprintf(fPltData,"#ERREUR FIN PERIODE\n");
				}
			}
		}else
		{
			// creation fichier temporaire avec les donnees pour gnuplot
			fprintf(fPltData,"#Page : %02d, Resolution %d x %d, image %02d, couverture : %d\n",iValue
					, 1024, iResolution, iLigne, iCouverture);

			iBPeriodeDeb = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[0];
			pTirDeb = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeDeb-1].LesTirages;
			iJour[0] = pTirDeb->id.jour;
			iMois [0]= pTirDeb->id.mois;
			iAnne [0]= pTirDeb->id.ans;
			eDay[0] = DonneJourDeLaSemaine(iJour[0],iMois[0],iAnne[0]);

			iBPeriodeFin = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[iDerniereBoule-1];
			pTirFin = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeFin-1].LesTirages;
			iJour[1] = pTirFin->id.jour;
			iMois [1]= pTirFin->id.mois;
			iAnne [1]= pTirFin->id.ans;
			eDay[1] = DonneJourDeLaSemaine(iJour[1],iMois[1],iAnne[1]);
			fprintf(fPltData,cMsg[1],uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
					uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
			sprintf(sBuffer,cMsg[3],iLigne, iCouverture,uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
					uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
			fprintf(f1,chTopMsg[24],sBuffer);
		}

		sprintf(sSuffix,cMsg[5],iLigne);
		strncpy(&sPltDtmp[iLenFileName-4],sSuffix,3);
		fPltDtmp = fopen(sPltDtmp,"w");
		if(fPltDtmp == NULL){
			printf("Fichier est Nul\n");
		}
		else{
			;//printf("Fichier :%s\n",sPltDtmp);
		}
		for (i=0;i<iDerniereBoule;i++){
			fprintf(fPltData,"%d;%d\n",(i+1),(**ptrResutAnalyse).list[0][iNbLigne].boule[i].total);
			fprintf(fPltDtmp,"%d;%d\n",(i+1),(**ptrResutAnalyse).list[0][iNbLigne].boule[i].total);
		}
		fprintf(fPltData,"# Fin image %02d\n\n",iLigne);
		fprintf(f1,chTopMsg[25],sPltDtmp);
		fclose(fPltDtmp);

		// A t'on termine une page
		if((iLigne % CST_MAX_GPH== 0)){
			if(iValue <iPageDessin){
				iValue++;
				fprintf(f1,chTopMsg[27]);
				fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
				fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
				fprintf(f1,chTopMsg[6],CST_MAX_GPH,1,"suite ...");
			}
		}

		//derniere page ?
		if((iValue == iPageDessin) &&  !iPassage){
			iNbImage = ((((**ptrResutAnalyse).iNbElm) % CST_MAX_GPH)+iPartiel);
			iResolution = CST_PIX_GPH * iNbImage;
			iPassage = 1;
			fprintf(f1,chTopMsg[27]);
			fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
			fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
			fprintf(f1,chTopMsg[6],iNbImage,1,"Fin");
		}
		iNbLigne--;
		iLigne++;
	}
	// Code de fin pour gnu plot
	iLgnCmdPlt=27;
	while(iLgnCmdPlt <31){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}

	fclose(f1);
	fclose(fPltData);
	return status;
}
// -- ###############################################################
// -- ###############################################################
// -- ###############################################################

etStatus CreeFichOrdArrivee (const char *cCheminVersFichier,
		stTabOccurence **ptrResutAnalyse, const char *mode)
{
	etStatus status = eNotSet;
	char sBuffer[128]={0};
	char sSuffix[5]={0};
	int i;

	int iNbLigne = 0;
	int iLgnCmdPlt = 0;
	int iCouverture = 0;
	int iDerniereBoule = 0;
	int iLenFileName = 0;

	int iPageDessin = 0;
	int iResolution = 0;
	int iValue = 0;
	int iLigne = 0;
	int iPassage = 0;
	int iPartiel =0;
	int iNbImage = 0;
	int iPDessin = 2;

	int iBPeriodeDeb = 0;
	int iBPeriodeFin = 0;
	stTirage *pTirDeb = NULL;
	stTirage *pTirFin = NULL;

	int iJour[2]={0};
	int iMois[2]={0};
	int iAnne [2]={0};
	etJour eDay[2]={eNoDaySet};

	FILE * f1 = NULL;
	FILE * fPltData = NULL;
	FILE * fPltDtmp = NULL;

	char *cmd_gplt = NULL;
	char *sPltData = NULL;
	char *sPltDtmp = NULL;
	char *pLastTir = NULL;
	char *sFilePfix= NULL;
	char sType[]="_A";

	iNbLigne = (**ptrResutAnalyse).iNbElm;
	if((**ptrResutAnalyse).pCnf->pTabTirage != NULL){
		iDerniereBoule = (**ptrResutAnalyse).pCnf->nbm[0];
	}

	iLenFileName = strlen(cCheminVersFichier);
	sFilePfix = calloc(iLenFileName-3,sizeof(char));
	strncpy(sFilePfix,cCheminVersFichier,iLenFileName-4);
	iLenFileName= iLenFileName +strlen(sType)+1;

	// preparation du fichier de commande gnuplot
	cmd_gplt = calloc(iLenFileName, sizeof(char));
	strcpy(cmd_gplt,sFilePfix);
	strcat(cmd_gplt,sType);
	strcat(cmd_gplt,".plt");

	f1 = fopen(cmd_gplt,"w");

	if (f1 == NULL)
		return (eErreur);

	// preparation du fichier resume des donnees
	sPltDtmp = calloc(iLenFileName, sizeof(char));
	strcpy(sPltDtmp,sFilePfix);
	strcat(sPltDtmp,sType);
	strcat(sPltDtmp,".xxx");

	// preparation du fichier resume des donnees
	sPltData = calloc(iLenFileName, sizeof(char));
	strcpy(sPltData,sFilePfix);
	strcat(sPltData,sType);
	strcat(sPltData,".dat");
	fPltData = fopen(sPltData,"w");

	if (fPltData == NULL){
		fclose(f1);
		return (eErreur);
	}
	// ----------------------------------

	// On met CST_MAX_GPH images maxi par page de dessins
	iPageDessin = iNbLigne/iPDessin; //iNbLigne / CST_MAX_GPH;
	iValue = iNbLigne % iPDessin;
	if( iValue!= 0){
		// Verifions que l'on a on moins une page
		if(!iPageDessin){
			iResolution = CST_PIX_GPH * iValue;
		}
		else
		{
			iResolution = 800;
		}
		iPageDessin++;
	}
	// ----------------------------------
	fprintf(f1,"reset\n");
	fprintf(f1,"clear\n");
	fprintf(f1,"set datafile separator \";\"\n");
	fprintf(f1,"set terminal push\n");
	fprintf(f1,"set terminal png size 1024,%d\n",iResolution);
	// ----------------------------------

	fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
	// Recuperer les 3 derniers tirages pour en faire le titre

	pLastTir = DonneLesDerniersTirages(ptrResutAnalyse,3);

	fprintf(f1, "set multiplot layout 2,1 title \"Ordre d'apparition des boules\\n%s\"\n",pLastTir);

	fprintf(f1,"set lmargin  7\n");
	fprintf(f1,"set bmargin  3\n");
	fprintf(f1,"set rmargin  1\n");
	fprintf(f1,"set tmargin  2\n");
	fprintf(f1,"set key off\n");
	fprintf(f1,"set grid y\n");
	fprintf(f1,"set xrange [0:%d]\n",iDerniereBoule+1);
	fprintf(f1,"set yrange [0:55]\n");
	fprintf(f1,"set ylabel \"Boules\" offset character 2,0 textcolor rgb \"red\"\n");
	fprintf(f1,"set style data linespoints\n");
	fprintf(f1,"unset xtics\n");
	fprintf(f1,"set mxtics\n");
	fprintf(f1,"set xtics border out scale 2,1 mirror rotate by -270  offset character 0, 0, 0 autojustify font \",8\"\n");

	fprintf(f1,"set format y \"\"\n");
	fprintf(f1,"set border 3\n");
	fprintf(f1,"set ytics scale 0,0\n");

#if 0
	fprintf(f1,"unset ytics\n");
	fprintf(f1,"set mytics\n");
	fprintf(f1,"set ytics 0,5 border out scale 2,1 offset  0.5,0, 0 font \",8\"\n");
#endif

	iLigne = 1;
	iValue = 1;
	while(iNbLigne >= 1){

		iCouverture = (**ptrResutAnalyse).list[0][iNbLigne].iNbTirage;

		if(iCouverture == 0){
			iPartiel=0;
			// verifions que c'est bien une couverture partielle
			if((**ptrResutAnalyse).list[0][iNbLigne].ucApB != NULL){
				iPartiel=1;
				// creation fichier temporaire avec les donnees pour gnuplot
				fprintf(fPltData,"#Page : %02d, Resolution %d x %d, image %02d, couverture : partielle\n",iValue
						, 1024, iResolution, iLigne);

				iBPeriodeDeb = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[0];
				pTirDeb = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeDeb-1].LesTirages;
				iJour[0] = pTirDeb->id.jour;
				iMois [0]= pTirDeb->id.mois;
				iAnne [0]= pTirDeb->id.ans;
				eDay[0] = DonneJourDeLaSemaine(iJour[0],iMois[0],iAnne[0]);

				// recherche jour periode fin
				for(i=0;i<iDerniereBoule;i++){
					if((**ptrResutAnalyse).list[0][iNbLigne].ucApB[i]==0)
						break;
				}
				if(i != iDerniereBoule){
					i--;
					iBPeriodeFin = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[i];
					pTirFin = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeFin-1].LesTirages;
					iJour[1] = pTirFin->id.jour;
					iMois [1]= pTirFin->id.mois;
					iAnne [1]= pTirFin->id.ans;
					eDay[1] = DonneJourDeLaSemaine(iJour[1],iMois[1],iAnne[1]);
					fprintf(fPltData,cMsg[1],uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
							uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
					sprintf(sBuffer,cMsg[4],iLigne, uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
							uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
					fprintf(f1,"set title \"%s\" font \",8\"\n",sBuffer);

				}
				else{
					fprintf(fPltData,"#ERREUR FIN PERIODE\n");
				}
			}
		}else
		{
			// creation fichier temporaire avec les donnees pour gnuplot
			fprintf(fPltData,"#Page : %02d, Resolution %d x %d, image %02d, couverture : %d\n",iValue
					, 1024, iResolution, iLigne, iCouverture);

			iBPeriodeDeb = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[0];
			pTirDeb = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeDeb-1].LesTirages;
			iJour[0] = pTirDeb->id.jour;
			iMois [0]= pTirDeb->id.mois;
			iAnne [0]= pTirDeb->id.ans;
			eDay[0] = DonneJourDeLaSemaine(iJour[0],iMois[0],iAnne[0]);

			iBPeriodeFin = (**ptrResutAnalyse).list[0][iNbLigne].ucApB[iDerniereBoule-1];
			pTirFin = (**ptrResutAnalyse).list[0][iNbLigne].boule[iBPeriodeFin-1].LesTirages;
			iJour[1] = pTirFin->id.jour;
			iMois [1]= pTirFin->id.mois;
			iAnne [1]= pTirFin->id.ans;
			eDay[1] = DonneJourDeLaSemaine(iJour[1],iMois[1],iAnne[1]);
			fprintf(fPltData,cMsg[1],uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
					uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
			sprintf(sBuffer,cMsg[3],iLigne, iCouverture,uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
					uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
			fprintf(f1,"set title \"%s\" font \",8\"\n",sBuffer);
		}

		sprintf(sSuffix,cMsg[5],iLigne);
		strncpy(&sPltDtmp[iLenFileName-4],sSuffix,3);
		fPltDtmp = fopen(sPltDtmp,"w");
		if(fPltDtmp == NULL){
			printf("Fichier est Nul\n");
		}
		else{
			;//printf("Fichier :%s\n",sPltDtmp);

			fprintf(fPltDtmp,"Id_Arrivee;Id_Boule\n");
			fprintf(fPltDtmp,"#########\n");
			for (i=0;i<iDerniereBoule;i++){
				fprintf(fPltData,"%d;%d\n",(i+1),(**ptrResutAnalyse).list[0][iNbLigne].ucApB[i]);
				fprintf(fPltDtmp,"%d;%d\n",(i+1),(**ptrResutAnalyse).list[0][iNbLigne].ucApB[i]);
			}
			fprintf(fPltData,"# Fin image %02d\n\n",iLigne);
			fprintf(f1,"plot '%s' using 1:2 with linespoints,'' using 1:2:(sprintf(\"%%d\",$2)) with labels offset 0, 0.5, 0\n",sPltDtmp);
			fclose(fPltDtmp);
		}
		// A t'on termine une page
		if((iLigne % iPDessin== 0)){
			if(iValue <iPageDessin){
				iValue++;
				fprintf(f1,chTopMsg[27]);
				fprintf(f1, chTopMsg[4], CST_PIX_HOR, 800);
				fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
				fprintf(f1,chTopMsg[6],iPDessin,1,"suite ...");
			}
		}

		//derniere page ?
		if((iValue == iPageDessin) &&  !iPassage){
			iNbImage = ((((**ptrResutAnalyse).iNbElm) % CST_MAX_GPH)+iPartiel);
			iResolution = 800;
			iPassage = 1;
			fprintf(f1,chTopMsg[27]);
			fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
			fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
			fprintf(f1,chTopMsg[6],iPDessin,1,"Fin");
		}
		iNbLigne--;
		iLigne++;
	}
	// Code de fin pour gnu plot
	iLgnCmdPlt=27;
	while(iLgnCmdPlt <31){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}

	fclose(f1);
	fclose(fPltData);
	return status;
}

// -- ###############################################################
// -- ###############################################################
// -- ###############################################################
// -- ###############################################################

etStatus CreeFichVoisins (const char *cCheminVersFichier,
		stTabOccurence **ptrResutAnalyse, const char *mode)
{
	etStatus status = eNotSet;
	char sBuffer[128]={0};
	char sSuffix[5]={0};
	int i,j,k,m,n;
	int iBoule = 0;
	int iBFuture = 0;

	int iNbLigne = 0;
	int iLgnCmdPlt = 0;
	int iCouverture = 0;
	int iDerniereBoule = 0;
	int iLenFileName = 0;

	int Nodata = 0;
	int iPageDessin = 0;
	int iResolution = 0;
	int iValue = 0;
	int iLigne = 0;
	int iPassage = 0;
	int iPartiel =0;
	int iDepart = 0;
	int iNbImage = 0;

	int iBPeriodeDeb = 0;
	int iBPeriodeFin = 0;
	stTirage *pTirDeb = NULL;
	stTirage *pTirFin = NULL;

	int iJour[2]={0};
	int iMois[2]={0};
	int iAnne [2]={0};
	etJour eDay[2]={eNoDaySet};

	FILE * f1 = NULL;
	FILE * fPltData = NULL;
	FILE * fPltDtmp = NULL;
	stTirage tmpTirage={{0},{0}};
	int iBouleVue[60]={0};
	stTirage tmpFuture={{0},{0}};

	char *cmd_gplt = NULL;
	char *sPltData = NULL;
	char *sPltDtmp = NULL;
	char *pLastTir = NULL;
	char *sFilePfix= NULL;
	char sType[]="_V";
	char msg[]={'c','b','a'};
	iNbLigne = (**ptrResutAnalyse).iNbElm;
	if((**ptrResutAnalyse).pCnf->pTabTirage != NULL){
		iDerniereBoule = (**ptrResutAnalyse).pCnf->nbm[0];
	}

	iLenFileName = strlen(cCheminVersFichier);
	sFilePfix = calloc(iLenFileName-3,sizeof(char));
	strncpy(sFilePfix,cCheminVersFichier,iLenFileName-4);
	iLenFileName= iLenFileName +strlen(sType)+1;

	// preparation du fichier de commande gnuplot
	cmd_gplt = calloc(iLenFileName, sizeof(char));
	strcpy(cmd_gplt,sFilePfix);
	strcat(cmd_gplt,sType);
	strcat(cmd_gplt,".plt");

	f1 = fopen(cmd_gplt,"w");

	if (f1 == NULL)
		return (eErreur);
	// ----------------------------------
	iLgnCmdPlt=0;
	while(iLgnCmdPlt<4){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}
	// ----------------------------------

	// preparation du fichier resume des donnees
	sPltDtmp = calloc(iLenFileName, sizeof(char));
	strcpy(sPltDtmp,sFilePfix);
	strcat(sPltDtmp,sType);
	strcat(sPltDtmp,".xxx");

	// preparation du fichier resume des donnees
	sPltData = calloc(iLenFileName, sizeof(char));
	strcpy(sPltData,sFilePfix);
	strcat(sPltData,sType);
	strcat(sPltData,".dat");
	fPltData = fopen(sPltData,"w");

	if (fPltData == NULL){
		fclose(f1);
		return (eErreur);
	}
	// ----------------------------------

	// On met CST_MAX_GPH images maxi par page de dessins
	iPageDessin = iNbLigne / CST_MAX_GPH;
	iValue = iNbLigne % CST_MAX_GPH;
	if( iValue!= 0){
		// Verifions que l'on a on moins une page
		if(!iPageDessin){
			iResolution = CST_PIX_GPH * iValue;
		}
		else
		{
			iResolution = CST_HT_GPH;
		}
		iPageDessin++;
	}

	fprintf(f1, chTopMsg[iLgnCmdPlt], CST_PIX_HOR, iResolution);
	iLgnCmdPlt++;

	// Recuperer les 3 derniers tirages pour en faire le titre

	pLastTir = DonneLesDerniersTirages(ptrResutAnalyse,3);
	//-------------------------

	// Analyse globale des tirages
	iValue = 1;
	iLigne = 1;
	iCouverture = (**ptrResutAnalyse).list[0][iLigne -1].iNbTirage;

	fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
	iLgnCmdPlt++;

	//fprintf(f1,chTopMsg[iLgnCmdPlt],CST_MAX_GPH,1,pLastTir);
	fprintf(f1, "set multiplot layout %d,1 title \"Voisins des boules\\n%s\"\n",CST_MAX_GPH,pLastTir);
	iLgnCmdPlt++;

	// Debut code fixe
	iLgnCmdPlt=7;
	while(iLgnCmdPlt<14){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}
	// Ligne XRANGE
	fprintf(f1,chTopMsg[iLgnCmdPlt],iDerniereBoule+1);
	iLgnCmdPlt++;
	while(iLgnCmdPlt<24){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}

	fprintf(fPltData,cMsg[0],iValue
			, CST_PIX_HOR, iResolution, iLigne, iCouverture);

	// Determination  de la periode de l'ensemble d'etude
	iBPeriodeDeb = (**ptrResutAnalyse).pCnf->pTabTirage->total;
	pTirDeb = &(**ptrResutAnalyse).pCnf->pTabTirage->LesTirages[iBPeriodeDeb-1];
	iJour[0] = pTirDeb->id.jour;
	iMois [0]= pTirDeb->id.mois;
	iAnne [0]= pTirDeb->id.ans;
	eDay [0]= DonneJourDeLaSemaine(iJour[0], iMois[0], iAnne[0]);
	iBPeriodeFin = (**ptrResutAnalyse).pCnf->iTopDelta;
	pTirFin = &(**ptrResutAnalyse).pCnf->pTabTirage->LesTirages[iBPeriodeFin];
	iJour [1]= pTirFin->id.jour;
	iMois [1]= pTirFin->id.mois;
	iAnne [1]= pTirFin->id.ans;
	eDay [1]= DonneJourDeLaSemaine(iJour[1], iMois[1], iAnne[1]);
	fprintf(fPltData,cMsg[1],uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
			uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);

	// Img:%02d, Couv:%d du %s xx/xx/xxxx au %s xx/xx/xxxx
	sprintf(sBuffer,cMsg[3],iLigne, iCouverture,uDayLabel[eDay[0]],iJour[0],iMois[0],iAnne[0],
			uDayLabel[eDay[1]],iJour[1],iMois[1],iAnne[1]);
	fprintf(f1,chTopMsg[iLgnCmdPlt],sBuffer);
	iLgnCmdPlt++;

	sprintf(sSuffix,cMsg[5],iLigne);
	strncpy(&sPltDtmp[iLenFileName-4],sSuffix,3);
	fPltDtmp = fopen(sPltDtmp,"w");
	if (fPltDtmp == NULL)
		printf("fpltEERROR\n");

	//prendre les 3 dernier tirages et trouver les meilleurs voisins de chaque boule
	// non deja prise pour faire la liste des voisins
	iLigne=1;
	iDepart= (**ptrResutAnalyse).pCnf->iTopDelta;
	for(i=iDepart;i<iDepart+3;i++){
		tmpTirage = (**ptrResutAnalyse).pCnf->pTabTirage->LesTirages[i];
		for (j=0;j<5;j++){
			iBoule= tmpTirage.b[0][j];

			// A ton deja vu cette boule
			if(!iBouleVue[iBoule-1]){
				iBouleVue[iBoule-1]=1;

				// A t'on termine une page
				if((iLigne % CST_MAX_GPH== 0)){
					if(iValue <iPageDessin){
						iValue++;
						fprintf(f1,chTopMsg[27]);
						fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
						fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
						fprintf(f1,chTopMsg[6],CST_MAX_GPH,1,"suite ...");
					}
				}

				//derniere page ?
				if((iValue == iPageDessin) &&  !iPassage){
					iNbImage = 15 % CST_MAX_GPH;
					iResolution = CST_PIX_GPH * iNbImage;
					iPassage = 1;
					fprintf(f1,chTopMsg[27]);
					fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
					fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
					fprintf(f1,chTopMsg[6],iNbImage,1,"Fin");
				}


				// Nom fichier
				sprintf(sSuffix,cMsg[5],iLigne);
				strncpy(&sPltDtmp[iLenFileName-4],sSuffix,3);
				fPltDtmp = fopen(sPltDtmp,"w");
				if(fPltDtmp == NULL){
					printf("Fichier est Nul\n");
				}

				// Message titre
				sprintf(sBuffer,cMsg[6],iLigne, iBoule);
				fprintf(f1,chTopMsg[24],sBuffer);

				for (k=0;k<iDerniereBoule;k++){
					fprintf(fPltData,"%d;%d\n",(k+1),(**ptrResutAnalyse).list[0][0].sLesVoisin[iBoule-1].boule[k]);
					fprintf(fPltDtmp,"%d;%d",(k+1),(**ptrResutAnalyse).list[0][0].sLesVoisin[iBoule-1].boule[k]);
					// Voir si cette boule est sortie aux trois derniers tirages
					iPartiel=(**ptrResutAnalyse).pCnf->iTopDelta;
					if( iPartiel != 0){
						for(m=(iPartiel-1);m>=0;m--){
							Nodata=0;
							tmpFuture =  (**ptrResutAnalyse).pCnf->pTabTirage->LesTirages[m];
							for (n=0;n<5;n++){
								iBFuture= tmpFuture.b[0][n];
								if(iBFuture == (k+1)){
									// On trouve un tirage donnant la boule
									fprintf(fPltDtmp,";%c",msg[m]);
									Nodata=1;
								}
							}
							if(!Nodata){
								Nodata = 1;
								fprintf(fPltDtmp,";");
							}
						}
					}
					fprintf(fPltDtmp,"\n");
				}
				fprintf(fPltData,cMsg[2],iLigne);
				fprintf(f1,chTopMsg[25],sPltDtmp);
				fclose(fPltDtmp);
				iLigne++;
			}
		}
	}


	// Code de fin pour gnu plot
	iLgnCmdPlt=27;
	while(iLgnCmdPlt <31){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}

	fclose(f1);
	fclose(fPltData);
	return status;
}

// -- ###############################################################
// -- ###############################################################
// -- ###############################################################
// -- ###############################################################

etStatus CreeFichPolaire (const char *cCheminVersFichier,
		stTabOccurence **ptrResutAnalyse, const char *mode)
{
	etStatus status = eNotSet;
	char sBuffer[128]={0};
	char sSuffix[5]={0};
	int i,j,k;
	int iBoule = 0;

	int iNbLigne = 0;
	int iLgnCmdPlt = 0;
	int iCouverture = 0;
	int iDerniereBoule = 0;
	int iLenFileName = 0;

	int iPageDessin = 0;
	int iResolution = 0;
	int iValue = 0;
	int iLigne = 0;
	int iPassage = 0;
	int iPartiel =0;
	int iNbImage = 0;

	int iBPeriodeDeb = 0;
	int iBPeriodeFin = 0;
	stTirage *pTirDeb = NULL;
	stTirage *pTirFin = NULL;

	int iJour[2]={0};
	int iMois[2]={0};
	int iAnne [2]={0};
	etJour eDay[2]={eNoDaySet};

	FILE * f1 = NULL;
	FILE * fPltData = NULL;
	FILE * fPltDtmp = NULL;
	stTirage tmpTirage={{0},{0}};
	int iBouleVue[60]={0};

	char *cmd_gplt = NULL;
	char *sPltData = NULL;
	char *sPltDtmp = NULL;
	char *pLastTir = NULL;
	char *sFilePfix= NULL;
	char sType[]="_VP";

	iNbLigne = (**ptrResutAnalyse).iNbElm;
	if((**ptrResutAnalyse).pCnf->pTabTirage != NULL){
		iDerniereBoule = (**ptrResutAnalyse).pCnf->nbm[0];
	}

	iLenFileName = strlen(cCheminVersFichier);
	sFilePfix = calloc(iLenFileName-3,sizeof(char));
	strncpy(sFilePfix,cCheminVersFichier,iLenFileName-4);
	iLenFileName= iLenFileName +strlen(sType)+1;

	// preparation du fichier resume des donnees
	sPltDtmp = calloc(iLenFileName-1, sizeof(char));
	strcpy(sPltDtmp,sFilePfix);
	strcat(sPltDtmp,"_V");
	strcat(sPltDtmp,".xxx");

	// preparation du fichier de commande gnuplot
	cmd_gplt = calloc(iLenFileName, sizeof(char));
	strcpy(cmd_gplt,sFilePfix);
	strcat(cmd_gplt,sType);
	strcat(cmd_gplt,".plt");

	f1 = fopen(cmd_gplt,"w");

	if (f1 == NULL)
		return (eErreur);
	// ----------------------------------
	// ----------------------------------
	fprintf(f1,"reset\n");
	fprintf(f1,"clear\n");
	fprintf(f1,"set datafile separator \";\"\n");
	fprintf(f1,"set terminal push\n");
	// ----------------------------------
	iPageDessin = iNbLigne / CST_MAX_POL;
	iValue = iNbLigne % CST_MAX_POL;
	if( iValue!= 0){
		// Verifions que l'on a on moins une page
		if(!iPageDessin){
			iResolution = CST_PIX_POL * iValue;
		}
		else
		{
			iResolution = CST_HT_POL;
		}
		iPageDessin++;
	}

	fprintf(f1,"set terminal png size 1024,%d\n",iResolution);
	fprintf(f1,cMsg[11]);
	// ----------------------------------

	// Analyse globale des tirages
	iValue = 1;
	iLigne = 1;
	iCouverture = (**ptrResutAnalyse).list[0][iLigne -1].iNbTirage;

	// Recuperer les 3 derniers tirages pour en faire le titre
	pLastTir = DonneLesDerniersTirages(ptrResutAnalyse,3);

	fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
	fprintf(f1,"set lmargin  7\n");
	fprintf(f1,"set bmargin  2\n");
	fprintf(f1,"set rmargin  1\n");
	fprintf(f1,"set tmargin  1\n");
	fprintf(f1,"set key off\n");
	fprintf(f1,"set angles degrees\n");
	fprintf(f1,"set polar\n");
	fprintf(f1,"set grid polar\n");
	//fprintf(f1,"set ylabel \"Sorties\" offset character 2,0 textcolor rgb \"red\" font \",8\"\n");
	fprintf(f1,"set format r \"\"\n");
	fprintf(f1,"set format xy \"\"\n");
	fprintf(f1,"set border 3\n");
	fprintf(f1,"set rtics -1,1 scale 0.5,0\n");
	fprintf(f1,"set ytics scale 0,0\n");
	fprintf(f1, "set multiplot layout %d,1 title \"Voisins des boules\\n%s\"\n",CST_MAX_POL,pLastTir);


	//prendre les 3 dernier tirages et trouver les meilleurs voisins de chaque boule
	// non deja prise pour faire la liste des voisins
	iLigne=0;
	for(i=(**ptrResutAnalyse).pCnf->iTopDelta;i<((**ptrResutAnalyse).pCnf->iTopDelta+3);i++){
		tmpTirage = (**ptrResutAnalyse).pCnf->pTabTirage->LesTirages[i];
		for (j=0;j<5;j++){
			iBoule= tmpTirage.b[0][j];

			// A ton deja vu cette boule
			if(!iBouleVue[iBoule-1]){
				iBouleVue[iBoule-1]=1;

				// A t'on termine une page
				if(iLigne != 0){
					if((iLigne % CST_MAX_POL== 0)){
						if(iValue <iPageDessin){
							iValue++;
							fprintf(f1,chTopMsg[27]);
							fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
							fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
							fprintf(f1,chTopMsg[6],CST_MAX_POL,1,"suite ...");
						}
					}
				}

				//derniere page ?
				if((iValue == iPageDessin) &&  !iPassage){
					iNbImage = iNbLigne % CST_MAX_POL;
					iResolution = CST_PIX_POL * iNbImage;
					iPassage = 1;
					fprintf(f1,chTopMsg[27]);
					fprintf(f1, chTopMsg[4], CST_PIX_HOR, iResolution);
					fprintf(f1,chTopMsg[5],sFilePfix, sType,iValue);
					fprintf(f1,chTopMsg[6],iNbImage,1,"Fin");
				}


				// Nom fichier
				sprintf(sSuffix,cMsg[5],iLigne+1);
				strncpy(&sPltDtmp[iLenFileName-5],sSuffix,3);

				// Message titre
				sprintf(sBuffer,cMsg[6],iLigne+1, iBoule);
				//fprintf(f1,chTopMsg[24],sBuffer); cMsg
				//iPartiel = (**ptrResutAnalyse).list[0][0].sLesVoisin[iBoule-1].boule[k]);
				iPartiel = (**ptrResutAnalyse).list[0][0].sLesVoisin[iBoule-1].ucTriV[iDerniereBoule-1];
				iPartiel = (**ptrResutAnalyse).list[0][0].sLesVoisin[iBoule-1].boule[iPartiel];
				fprintf(f1,cMsg[9],sBuffer);
				fprintf(f1,cMsg[7],iPartiel);
				fprintf(f1,cMsg[10],iPartiel+1);
				fprintf(f1,cMsg[8],sPltDtmp);

				iLgnCmdPlt=12;
				while(iLgnCmdPlt <17){
					fprintf(f1,cMsg[iLgnCmdPlt],iDerniereBoule);
					iLgnCmdPlt++;
				}
				iLigne++;
			}
		}
	}


	// Code de fin pour gnu plot
	iLgnCmdPlt=27;
	while(iLgnCmdPlt <31){
		fprintf(f1,chTopMsg[iLgnCmdPlt]);
		iLgnCmdPlt++;
	}

	fclose(f1);
	return status;
}
